home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2.lha / p4-1.2 / usc / usc.c < prev    next >
C/C++ Source or Header  |  1992-10-19  |  3KB  |  155 lines

  1. /*
  2.  * USC.C  (Source file for the Microsecond Clock package)
  3.  *
  4.  * Written by:  Arun Nanda    (07/17/91)
  5.  * Modified by R. Butler
  6.  */
  7.  
  8. #include "usc_sys.h"
  9.  
  10.  
  11. VOID usc_init()
  12. {
  13.  
  14. #if defined(MULTIMAX)
  15.  
  16.     usc_multimax_timer = timer_init();
  17.     usc_MD_rollover_val = (usc_time_t) ((1<<usc_MD_timer_size)-1);
  18.  
  19. #endif
  20.  
  21.  
  22. #if defined(SYMMETRY) || defined(SYMMETRY_PTX)
  23.  
  24.     unsigned long roll;
  25.  
  26.     usclk_init();
  27.  
  28.     roll = 1 << (usc_MD_timer_size-1);
  29.     usc_MD_rollover_val = (usc_time_t) (roll + roll - 1);
  30.  
  31. #endif
  32.  
  33.  
  34. #if defined(TC_2000) || defined(TC_2000_TCMP)
  35.  
  36.     unsigned long roll;
  37.  
  38.     roll = 1 << (usc_MD_timer_size-1);
  39.     usc_MD_rollover_val = (usc_time_t) (roll + roll - 1);
  40.  
  41. #endif
  42.  
  43.  
  44. #if defined(IPSC860)
  45.  
  46.     esize_t hwtime;
  47.     unsigned long ustime;
  48.  
  49.     hwtime.shigh = hwtime.slow = ~0x0;
  50.         hwtime.shigh = (hwtime.shigh & 0x7) << (sizeof(long)*8-3);
  51.         hwtime.slow = ((hwtime.slow >> 3) & ~(0x7 << (sizeof(long)*8-3)))
  52.                 | hwtime.shigh;
  53.         ustime = (unsigned long)hwtime.slow * 0.8;
  54.     usc_MD_rollover_val = (usc_time_t) ustime; 
  55.  
  56. #endif
  57.  
  58. #if defined(FX2800)  ||  defined(FX2800_SWITCH)
  59.  
  60.     struct hrcval temptime;
  61.     unsigned long roll;
  62.  
  63.     hrcstamp(&temptime);
  64.     roll = 1 << ((sizeof(usc_time_t) * 8) - 1);
  65.     usc_MD_rollover_val = (usc_time_t) (roll + roll - 1);
  66.  
  67. #endif
  68.  
  69.  
  70. #if defined(SUN) || defined(HP) || \
  71.     defined(BALANCE) || \
  72.     defined(RS6000)  ||  defined(IBM3090) || \
  73.     defined(NEXT) || defined(TITAN) || defined(GP_1000) || \
  74.     defined(KSR)  || \
  75.     defined(SGI)  || defined(FX8)
  76.  
  77.     struct timeval tp;
  78.     struct timezone tzp;
  79.     unsigned long roll;
  80.  
  81.     gettimeofday(&tp,&tzp);
  82.  
  83.     roll = 1 << ((sizeof(usc_time_t)*8)-1);
  84.     roll = roll + roll - 1;
  85.     usc_MD_rollover_val = (usc_time_t) (roll / 1000000);
  86.  
  87. #endif
  88.  
  89. }
  90.  
  91.  
  92.  
  93. usc_time_t usc_MD_clock()
  94. {
  95.  
  96. #if defined(TC_2000) || defined(TC_2000_TCMP)
  97.  
  98.     struct 
  99.     {
  100.     unsigned long hi;
  101.     unsigned long low;
  102.     } usclock;
  103.  
  104.     get64bitclock(&usclock);
  105.     return((usc_time_t)usclock.low);
  106.  
  107. #endif
  108.  
  109.  
  110. #if defined(IPSC860)
  111.  
  112.     esize_t hwtime;
  113.     unsigned long ustime;
  114.  
  115.     hwclock(&hwtime);
  116.         hwtime.shigh = (hwtime.shigh & 0x7) << (sizeof(long)*8-3);
  117.         hwtime.slow = ((hwtime.slow >> 3) & ~(0x7 << (sizeof(long)*8-3)))
  118.                 | hwtime.shigh;
  119.         ustime = (unsigned long)hwtime.slow * 0.8;
  120.     return( (usc_time_t) ustime);
  121.  
  122. #endif
  123.  
  124. #if defined(FX2800)  ||  defined(FX2800_SWITCH)
  125.  
  126.     struct hrcval temptime;
  127.  
  128.     hrcstamp(&temptime);
  129.     return ((usc_time_t) (temptime.hv_low * 10));
  130.  
  131. #endif
  132.  
  133.  
  134. #if defined(SUN) || defined(HP) || \
  135.     defined(BALANCE) || \
  136.     defined(RS6000) || defined(IBM3090) || \
  137.     defined(NEXT) || defined(TITAN) || defined(TC1000) || \
  138.     defined(KSR)  || \
  139.     defined(SGI) || defined(FX8)
  140.  
  141.     unsigned long ustime;
  142.     struct timeval tp;
  143.     struct timezone tzp;
  144.  
  145.     gettimeofday(&tp,&tzp);
  146.     ustime = (unsigned long) tp.tv_sec;
  147.     ustime = ustime % usc_MD_rollover_val;
  148.     ustime = (ustime * 1000000) + (unsigned long) tp.tv_usec;
  149.  
  150.     return((usc_time_t) ustime);
  151.  
  152. #endif
  153.  
  154. }
  155.